require('dotenv').config() // 加载环境变量
const express = require('express')
const cors = require('cors')
const morgan = require('morgan')
const helmet = require('helmet')
const clickhouse = require('./config/ch') // ClickHouse 连接
const { consumeQueue } = require('./utils/rabbitmq')
const timeout = require('connect-timeout')

// 初始化 Express
const app = express()
const PORT = process.env.PORT || 3000

// ---------------------- 前端友好中间件 ----------------------
// CORS 跨域（前端本地联调必备）
app.use(
  cors({
    origin:
      process.env.NODE_ENV === 'development'
        ? 'http://localhost:5173' // 前端本地地址（如 Vite）
        : process.env.FRONTEND_PROD_URL, // 生产环境前端地址
    credentials: true, // 允许携带 Cookie（如登录态）
  })
)

// 解析 JSON 请求体（前端发送 JSON 数据必备）
app.use(express.json({ limit: '10mb' }))

// 设置全局超时时间为10秒
app.use(timeout('10s'))

// HTTP 日志（调试用）
app.use(morgan('dev'))

// 安全头设置（防止 XSS 等攻击）
app.use(helmet())

// ---------------------- 路由注册 ----------------------

// 财务相关路由（前端重点关注）
const financeRouter = require('./routes/finance.routes')
app.use('/api/finance', financeRouter)

// ---------------------- 错误处理（前端友好） ----------------------
// 统一错误捕获（前端得到清晰的错误信息）
app.use(require('./middlewares/errorHandler'))

// ---------------------- 启动服务 ----------------------
// 连接 ClickHouse（已在 config/ch.js 中测试）
app.listen(PORT, () => {
  console.log(`🚀 服务启动成功，前端访问地址：http://localhost:${PORT}`)
  // consumeQueue('finance_created', (msg) => {
  //   console.log('收到新账单消息:', msg)
  // })
})
